package com.ziroom.finance.rabbitmq.common;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * Represents a connection with a queue
 *
 * @author syntx
 */
public abstract class EndPoint {

    protected Channel channel;
    protected Connection connection;
    protected String endPointName;

    public EndPoint(String endpointName) throws IOException, TimeoutException {
        this.endPointName = endpointName;

        //Create a connection factory
        ConnectionFactory factory = new ConnectionFactory();

        //hostname of your rabbitmq server
        factory.setHost("localhost");

        factory.setUsername("liyb");
        factory.setPassword("123456");
        factory.setPort(5672);

        //getting a connection
        connection = factory.newConnection();

        //creating a channel
        channel = connection.createChannel();
//        channel.basicQos(1);//ack一次接收一条数据

        //declaring a queue for this channel. If queue does not exist,
        //it will be created on the server.
        //第二个参数，队列是false不持久化
        channel.queueDeclare(endpointName, true, false, false, null);
    }


    /**
     * 关闭channel和connection。并非必须，因为隐含是自动调用的。
     *
     * @throws IOException
     */
    public void close() throws IOException, TimeoutException {
        this.channel.close();
        this.connection.close();
    }
}